#pragma once

#include <string>
#include <chrono>
#include <filesystem>
#include <spdlog/spdlog.h>
#include <utility>

namespace judge {

class CgroupManager {
public:
    CgroupManager();
    ~CgroupManager();

    // 添加进程到cgroup
    void addProcess(pid_t pid);

    // 设置资源限制
    void setCPUTimeLimit(std::chrono::milliseconds ms);
    void setMemoryLimit(std::size_t bytes);

    // 获取资源使用情况
    std::pair<std::chrono::microseconds, std::size_t> getResourceUsage();

    bool disabled_{false};

private:
    void initSubsystems();
    void cleanup();
    void writeToFile(const std::string& path, const std::string& content);

    std::string cgroup_path_;
    std::chrono::milliseconds cpu_time_limit_{0};
    std::size_t memory_limit_{0};
};

} // namespace judge 